const { Controller } = require('egg');

/**
 * 上传控制器
 */
class UploadController extends Controller {
  /**
   * 批量上传图片
   */
  async uploadImages() {
    const { ctx } = this;
    try {
      // 获取上传的文件列表
      const files = ctx.request.files;
      if (!files || files.length === 0) {
        ctx.throw(400, '请选择要上传的图片');
      }

      // 获取额外参数
      const { category, tags } = ctx.request.body;

      // 处理标签参数
      let tagsArray = [];
      if (tags) {
        try {
          tagsArray = typeof tags === 'string' ? JSON.parse(tags) : tags;
        } catch (e) {
          ctx.throw(400, '标签格式不正确');
        }
      }

      // 使用服务处理批量上传
      const results = [];
      for (const file of files) {
        const result = await ctx.service.uploadService.uploadImage(file, category, tagsArray);
        results.push(result);
      }

      // 删除临时文件
      ctx.cleanupRequestFiles();

      // 返回结果
      ctx.success(results, `成功上传${results.length}张图片`);
    } catch (error) {
      // 删除临时文件
      ctx.cleanupRequestFiles();
      ctx.throw(500, '上传失败: ' + error.message);
    }
  }

  /**
   * 删除图片
   */
  async deleteImage() {
    const { ctx } = this;
    try {
      const { filePath } = ctx.request.body;

      // 使用服务处理删除
      const result = await ctx.service.uploadService.deleteImage(filePath);

      if (result) {
        ctx.success(null, '删除成功');
      } else {
        ctx.throw(404, '文件不存在');
      }
    } catch (error) {
      ctx.throw(500, '删除失败: ' + error.message);
    }
  }

  /**
   * 获取图片信息
   */
  async getImageInfo() {
    const { ctx } = this;
    try {
      const { id } = ctx.params;

      // 使用服务获取图片信息
      const result = await ctx.service.uploadService.getImageInfo(id);

      ctx.success(result, '获取成功');
    } catch (error) {
      ctx.throw(500, '获取失败: ' + error.message);
    }
  }

  /**
   * 批量删除图片
   */
  async batchDeleteImages() {
    const { ctx } = this;
    try {
      const { ids } = ctx.request.body;

      // 使用服务处理批量删除
      const result = await ctx.service.uploadService.batchDeleteImages(ids);

      ctx.success(result, '批量删除完成');
    } catch (error) {
      ctx.throw(500, '批量删除失败: ' + error.message);
    }
  }


  /**
   * 获取图片列表
   */
  async getImageList() {
    const { ctx } = this;
    try {
      const { category, tags, startTime, endTime, fileName } = ctx.query;
      let { pageNum, pageSize } = ctx.query;

      // 确保分页参数为数字类型
      pageNum = parseInt(pageNum, 10);
      pageSize = parseInt(pageSize, 10);
      if (isNaN(pageNum) || pageNum < 1) pageNum = 1;
      if (isNaN(pageSize) || pageSize < 1) pageSize = 10;

      // 处理标签参数
      let tagsArray = [];
      if (tags) {
        try {
          // 尝试解析JSON数组
          const parsed = JSON.parse(tags);
          tagsArray = Array.isArray(parsed) ? parsed : [parsed];
        } catch (e) {
          // 如果JSON解析失败，尝试按逗号分割
          if (typeof tags === 'string') {
            tagsArray = tags.split(',').map(tag => tag.trim()).filter(tag => tag);
          } else {
            tagsArray = [tags];
          }
        }
      }
      // 调用服务层方法
      const result = await ctx.service.uploadService.getImageList({
        pageNum,
        pageSize,
        category,
        tags: tagsArray,
        startTime,
        endTime,
        fileName,
      });

      ctx.success(result, '获取成功');
    } catch (error) {
      ctx.throw(500, '获取失败: ' + error.message);
    }
  }

  /**
   * 修改图片信息
   */
  async updateImageInfo() {
    const { ctx } = this;
    try {
      const { id } = ctx.params;
      const { fileName, category, tags } = ctx.request.body;

      // 验证ID
      if (!id) {
        ctx.throw(400, '请提供有效的图片ID');
      }

      // 处理标签参数
      let tagsArray = [];
      if (tags !== undefined) {
        if (Array.isArray(tags)) {
          tagsArray = tags;
        } else if (typeof tags === 'string') {
          try {
            tagsArray = JSON.parse(tags);
          } catch (e) {
            ctx.throw(400, '标签格式不正确');
          }
        } else {
          ctx.throw(400, '标签必须是数组或JSON字符串');
        }
      }

      // 调用服务层方法
      await ctx.service.uploadService.updateImageInfo(id, {
        fileName,
        category,
        tags: tagsArray,
      });

      ctx.success(null, '修改成功');
    } catch (error) {
      ctx.throw(500, '修改失败: ' + error.message);
    }
  }

  /**
   * 批量修改图片信息
   */
  async batchUpdateImageInfo() {
    const { ctx } = this;
    try {
      const { ids, category, tags } = ctx.request.body;

      // 验证ID数组
      if (!Array.isArray(ids) || ids.length === 0) {
        ctx.throw(400, '请提供有效的图片ID数组');
      }

      // 处理标签参数
      let tagsArray = [];
      if (tags !== undefined) {
        if (Array.isArray(tags)) {
          tagsArray = tags;
        } else if (typeof tags === 'string') {
          try {
            tagsArray = JSON.parse(tags);
          } catch (e) {
            ctx.throw(400, '标签格式不正确');
          }
        } else {
          ctx.throw(400, '标签必须是数组或JSON字符串');
        }
      }

      // 调用服务层方法
      const result = await ctx.service.uploadService.batchUpdateImageInfo(ids, {
        category,
        tags: tagsArray,
      });

      if (result.success) {
        ctx.success(null, `成功修改${result.count}张图片`);
      } else {
        ctx.success(null, '没有图片被修改');
      }
    } catch (error) {
      ctx.throw(500, '批量修改失败: ' + error.message);
    }
  }
}
module.exports = UploadController;
